#include <iostream>
#include <stack>

using namespace std;
// 232.用栈实现队列
// 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作（push、pop、peek、empty）：
//实现 MyQueue 类：
//void push(int x) 将元素 x 推到队列的末尾
//int pop() 从队列的开头移除并返回元素
//int peek() 返回队列开头的元素
//boolean empty() 如果队列为空，返回 true ；否则，返回 false
class MyQueue {
private:
    stack<int> s1, s2;  // 输入栈s1和输出栈s2
    // 如果输出栈s2为空，将输入栈s1中所有元素放入输出栈
    void in_to_out() {
        if(s2.empty()) {
            while(!s1.empty()) {
                s2.push(s1.top());
                s1.pop();
            }
        }
    }
public:
    MyQueue() {

    }
    // 入队
    void push(int x) {
        s1.push(x);
    }
    // 出队
    int pop() {
        in_to_out();
        int x = s2.top();
        s2.pop();
        return x;
    }
    // 取队头
    int peek() {
        in_to_out();
        return s2.top();
    }
    // 判队空
    bool empty() {
        return s1.empty() && s2.empty();
    }
};

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
